草庐IT

Android CalendarView 减慢布局

全部标签

c++ - "black box"类型的标准布局保证的目的是什么?

C++标准指定mutex、atomics或conditinal_variable是标准布局类型。这个规范有什么好处?用户如何利用此属性?一般来说,如果知道一个类型是标准布局但不知道其实现细节,我能得到什么? 最佳答案 来自thisstandardlayoutreference:Standardlayouttypesareusefulforcommunicatingwithcodewritteninotherprogramminglanguages.例如,如果您构建一个C和C++混合应用程序,C结构将是标准布局,并且可以在用C编写的部

c++ - POD对象 vector 的内存布局

假设我有一个简单的C++类,classData{public:floatdata[3];voidclear(){data[0]=0.0f;data[1]=0.0f;data[2]=0.0f}}和数据的vector,std::vectorv(10);假设&v[0].data[0]指向一个包含30个float的数组是否安全? 最佳答案 来自标准23.3.6.1ClasstemplatevectoroverviewTheelementsofavectorarestoredcontiguously,meaningthatifvisavect

c++ - libstdc++ 的 make_shared 布局是否在 gcc 4.x 和 gcc 6.x 之间发生了变化?

考虑以下由三个文件组成的最小示例:foo.h:#pragmaonce#includestructX{uint64_ti=0xdeadbeefdeadbeefULL;};voidfoo();foo.cxx:#include"foo.h"voidfoo(){std::make_shared();}main.cxx:#include#include"foo.h"templatestd::shared_ptrstd::make_shared();intmain(){foo();}然后用不同版本的gcc编译这两个翻译单元:$g++-4.8.2-g-std=c++11-O0-cfoo.cxx-of

c++ - Vulkan-hpp 正在将非标准布局类重新解释为另一个类。这是合法的吗?

最近我一直在使用Vulkan-Hpp(VulkanApi的官方c++绑定(bind),GithubLink)。查看源代码,我发现他们围绕原生Vulkan结构创建了包装器类(例如vk::InstanceCreateInfo围绕着VkInstanceCreateInfo)。(注意:环绕,而不是派生自)调用nativeVulkanAPI时,指向包装器类的指针被reinterpret_cast编辑到nativeVulkan结构中。使用vk::InstanceCreateInfo的示例://definitionofvk::InstanceCreateInfostructInstanceCreat

c++ - 优化C++中类实例的内存布局

将应用程序从32位升级到64位会增加对象的指针大小和内存占用量。我正在寻找尽可能减少对象内存占用的方法。对于POD结构,我转储了该结构的内存布局,以弄清楚如何打包成员并减少编译器填充。有没有办法弄清楚类实例等非POD对象的内存布局?我怎样才能实现类似于打包类对象的东西?谢谢,丹 最佳答案 您可以使用GCC的-Wpadded来通知您添加填充的位置,然后根据该信息重新排序,在某些情况下减小大小。强制打包数据对于内存中的表示不是一个好主意。 关于c++-优化C++中类实例的内存布局,我们在St

c++ - 在C/C++结构中添加UNUSED元素会加快并减慢代码执行速度

我编写了以下结构,供我正在使用的Arduino软件PWM库中使用,以一次PWM(最多20个引脚(在Uno上)或一次最多70个引脚(在Mega上))。如所写,代码的ISR部分(eRCaGuy_SoftwarePWMupdate())处理此结构的数组,需要133us来运行。但是很奇怪,如果我取消注释“byteflags1;”行,则为。(在struct中),尽管flags1尚未在任何地方使用,但ISR现在需要158us来运行。然后,如果我取消注释“byteflags2;”因此现在BOTH标志都已取消注释,运行时回落到(133us)之前的位置。为什么会这样呢?以及我该如何解决?(即:对于该特定

c++ - 我可以将 final 关键字应用于 C++11 中的 POD(标准布局)结构吗?我是不是该?

在一个充满对象(具有适当行为)和相对较少的非面向对象结构(仅由数据字段和无方法组成)的C++项目中,我想防止意外误用这些结构,其中可能会尝试创建一个继承自它的类。根据我的理解,因为这些“POD”(普通旧数据)结构没有虚拟析构函数,所以不可能通过指针正确删除派生类对象(如果允许创建它)POD类型。这似乎是C++11“final”关键字的一个很好的用例,它将一个类或结构标记为不可继承。但是,我想知道“final”关键字是否会导致结构变为非POD?我怀疑标准文档可能已经解决了这个问题,但我不够聪明,无法在很长的文档中进行筛选以找出答案。欢迎任何有用的指示。注意:我对仅仅知道它通过了某些编译器

c++ - 我可以使用 memcpy 写入多个相邻的标准布局子对象吗?

免责声明:这是试图深入研究一个更大的问题,因此请不要纠结于该示例在实践中是否有意义。而且,是的,如果您想复制对象,请使用/提供复制构造函数。(但请注意,即使是示例也不会复制整个对象;它会尝试在几个相邻的(Q.2)整数上blit一些内存。)给定一个C++StandardLayoutstruct,我可以使用memcpy一次写入多个(相邻的)子对象?完整示例:(https://ideone.com/1lP2Gdhttps://ideone.com/YXspBk)#include#include#include#include#include#includestructMyStandardLa

c++ - 非标准布局类的布局限制

编译器是否可以自由地对非标准布局类中的数据进行重新排序?比如是否允许改变struct{charx;private:shorty;public:charz;};到struct{private:shorty;public:charx;charz;}; 最佳答案 编辑:我最初记错了引用,允许编译器按照9.2/14执行此操作:Nonstaticdatamembersofa(non-union)classwiththesameaccesscontrol(Clause11)areallocatedsothatlatermembershavehi

c++ - 用于注释目的的大括号范围是否会减慢 C++ 代码的速度?

用于明确代码边界的大括号范围是否会增加代码执行时间?在我看来,确实如此。因为在C++中退出curlybracescope意味着stackunwinding和curlybracescope用于注释目的会增加stackunwinding时间。但是不知道贵不贵?我可以忽略副作用吗?您应该关注代码结构,而不是以下代码片段的代码本身。#include#include#include#includeintmain(){std::stringstr="Hello";std::vectorv;{//usesthepush_back(constT&)overload,whichmeans//we'lli